package Z.dailyExercise._0110;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

public class _1640_能否连接形成数组 {
    /**
     * 自解：用map存piece key是每一个子数组的第一个元素 value就是数组
     * 找key是否有arr[0] 如果没有直接返回false
     * 如果有 循环
     *     1）i=1开始  key对应的那个数组是否结束
     *     ---结束：找新key和下一个i元素是否匹配
     *     ---没结束：判断
     *     ===耗内存，但思路正确嘿嘿
     * @param arr
     * @param pieces
     * @return
     */
    public boolean canFormArray(int[] arr, int[][] pieces) {
        Map<Integer,int[]> map = new HashMap<>();
        for (int i=0;i< pieces.length;i++){
            map.put(pieces[i][0],pieces[i]);
        }

        if (!map.containsKey(arr[0])){
            return false;
        }
        int[] com = map.get(arr[0]);//用来匹配的数组
        int index =1;//arr遍历
        int j=1;//在数组中的匹配标志
        while (index<arr.length){
            if (j<com.length  ){
                if (arr[index] == com[j]){
                    j++;
                    index++;
                }else {
                    return false;
                }
            }else {
                if (!map.containsKey(arr[index])){
                    return false;
                }else {
                    com = map.get(arr[index]);//用来匹配的数组
                    j=1;
                    index++;
                }
            }

        }

        return true;



    }
}
